function runAsync(x) {
    const p = new Promise(r => setTimeout(() => console.log(x), 1000));
    return p;
};

function runReject(x) {
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(`Error: ${x}`)
            console.log(x);
        }, 1000 * x)
    });

    return p;
};

Promise.all([runAsync(1), runReject(4), runAsync(3), runReject(2)])
    .then(res => console.log('res', res))
    .catch(err => console.log('err', err));



// 1s后输出
// 1
// 3
// 2s后输出
// 2
// Error: 2
// 4s后输出
// 4


// catch会捕获最先的异常